package code.generator.main;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig;
import com.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication;
import com.github.davidfantasy.mybatisplus.generatorui.mbp.NameConverter;
import com.github.davidfantasy.mybatisplus.generatorui.mbp.TemplateVaribleInjecter;
import com.google.common.base.Strings;

import java.util.HashMap;
import java.util.Map;

/**
 * MYSQL数据库-代码生成
 */
public class MSQL_CodeGenerator {

    private static final String BASE_PACKAGE = "com.demo";


    public static void main(String[] args) {
        GeneratorConfig config = GeneratorConfig.builder().jdbcUrl("jdbc:mysql://localhost:3306/test")
                .userName("root").password("root").driverClassName("com.mysql.cj.jdbc.Driver")
                // 数据库schema，POSTGRE_SQL,ORACLE,DB2类型的数据库需要指定
                // .schemaName("myBusiness")
                // 如果需要修改各类生成文件的默认命名规则，可自定义一个NameConverter实例，覆盖相应的名称转换方法：
//                .idType(IdType.ASSIGN_ID)
                .templateVaribleInjecter(new TemplateVaribleInjecter() {
                    @Override
                    public Map<String, Object> getCustomTemplateVaribles(TableInfo tableInfo) {
                        Map<String,Object> ruleMap = new HashMap<>();
                        return ruleMap;
                    }
                })
                .nameConverter(new NameConverter() {
                    /**
                     * 自定义Service类文件的名称规则
                     */
                    public String serviceNameConvert(String tableName) {
                        return ConvertorUtil.toCamelCaseClassName(tableName) + "Service";
                    }

                    /**
                     * 自定义entity类文件的名称规则
                     */
                    public String entityNameConvert(String tableName) {
                        return ConvertorUtil.toCamelCaseClassName(tableName);
                    }

                    public String propertyNameConvert(String fieldName) {
                        if (Strings.isNullOrEmpty(fieldName)) {
                            return "";
                        } else {
                            return fieldName.contains("_") ? StrUtil.toCamelCase(fieldName.toLowerCase()) : fieldName.toLowerCase();
                        }
                    }
                    /**
                     * 自定义Controller类文件的名称规则
                     */
                    public String controllerNameConvert(String tableName) {
                        return ConvertorUtil.toCamelCaseClassName(tableName) + "Controller";
                    }
                })
                .basePackage(BASE_PACKAGE).port(8088).build();

        MybatisPlusToolsApplication.run(config);
    }




}
